home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
011
/
brutil.arc
/
ATTR.ASM
< prev
next >
Wrap
Assembly Source File
|
1987-09-04
|
3KB
|
173 lines
LF EQU 0AH
CR EQU 0DH
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 100H
START: JMP L023C
L014C DB 'Syntax: ATTR [+A|-A] [+S|-S] [+H|-H] [+R|-R] '
DB '[drive:][path\]filename.ext',CR,LF
DB ' Archive System Hidden Read-Only',CR,LF,LF
DB 'Note: if Vol flag is set, other flags can not be changed',CR,LF
DB '$'
L01C0 DB 'Needs DOS 2.0 +$'
L01D6 DB 'Incorrect flag$'
L01EB DB 'Incorrect File Spec$'
L0205 DB 9,' ,;=',CR
L020B DB 'ASHR',20H,4,2,1
L0213 DB ' $'
L0218 DB 'Arc $'
DB 'Dir $'
DB 'Vol $'
DB 'Sys $'
DB 'Hid $'
DB 'R-O$'
L0235 DB 0
L0236 DB 0
L0237 DB 0
L0238 DW 0
L023A DW 0
L023C: MOV AH,30H
INT 21H
CMP AL,2
JNB L024D
MOV DX,OFFSET L01C0
L0247: MOV AH,9
INT 21H
INT 20H
L024D: MOV SI,81H
CLD
L0251: LODSB
MOV DI,OFFSET L0205
MOV CX,5
REPNZ SCASB
JZ L0251
MOV DX,OFFSET L014C
CMP AL,0DH
JZ L0247
MOV DI,OFFSET L0237
CMP AL,'+'
JZ L0271
DEC DI
CMP AL,'-'
JNZ L0292
L0271: MOV BYTE PTR L0235,0FFH
LODSB
AND AL,0DFH
MOV BX,OFFSET L020B
MOV CX,4
L027F: CMP AL,[BX]
JZ L028B
INC BX
LOOP L027F
MOV DX,OFFSET L01D6
JMP SHORT L0247
L028B: MOV AL,[BX+4]
OR [DI],AL
JMP SHORT L0251
L0292: NOT BYTE PTR L0236
MOV L0238,SI
DEC WORD PTR L0238
L029E: LODSB
MOV DI,OFFSET L0205
MOV CX,6
REPNZ SCASB
JNZ L029E
DEC SI
MOV BYTE PTR [SI],0
MOV CX,SI
MOV SI,L0238
SUB CX,SI
MOV DI,OFFSET (L0373+43)
MOV L023A,DI
L02BC: LODSB
STOSB
CMP AL,':'
JZ L02C6
CMP AL,'\'
JNZ L02CA
L02C6: MOV L023A,DI
L02CA: LOOP L02BC
MOV DX,OFFSET L0373
MOV AH,1AH
INT 21H
MOV DX,L0238
MOV CX,1FH
MOV AH,4EH
L02DC: INT 21H
JNB L02EE
CMP AX,12H
JNZ L02E8
JMP L0366
L02E8: MOV DX,OFFSET L01EB
JMP L0247
L02EE: MOV SI,OFFSET (L0373+30)
CMP BYTE PTR [SI],'.'
JNZ L02F4
JMP L0361
L02F4: TEST BYTE PTR L0235,0FFH
JZ L02F8
MOV CL,BYTE PTR (L0373+21)
AND CL,3FH
AND CL,L0236
OR CL,L0237
CMP CL,BYTE PTR (L0373+21)
JZ L0361
L02F8: MOV DI,L023A
MOV CX,0EH
L0300: LODSB
STOSB
OR AL,AL
JZ L030B
CALL L0368
LOOP L0300
L030B: MOV AL,' ' ;' '
CALL L0368
LOOP L030B
MOV DX,OFFSET (L0373+43)
MOV CL,BYTE PTR (L0373+21)
TEST BYTE PTR L0235,0FFH
JZ L0331
AND CL,2FH
AND CL,L0236
OR CL,L0237
MOV AX,4301H
INT 21H
MOV AX,4300H
INT 21H
JNB L0331
MOV CL,BYTE PTR (L0373+21)
L0331: MOV BL,CL
SHL BL,1
SHL BL,1
MOV CX,6
MOV DX,OFFSET L0218
L0345: PUSH DX
SHL BL,1
JB L034D
MOV DX,OFFSET L0213
L034D: MOV AH,9
INT 21H
POP DX
ADD DX,5
LOOP L0345
MOV AL,CR
CALL L0368
MOV AL,LF
CALL L0368
L0361: MOV AH,4FH
JMP L02DC
L0366: INT 20H
L0368: PUSH AX
PUSH DX
MOV DL,AL
MOV AH,2
INT 21H
POP DX
POP AX
RET
L0373 DB 0,0,0,0,0
CODE ENDS
END START
L0368: PUSH